Data processing systems having multiple storage devices and memory partitions can have the ability to concurrently execute multiple independent processes. A controller can dynamically allocate portions of memory to each individual process. The controller can allocate and release the memory as required by the processes. Because processing of data for the various independent processes can occur in a distributed manner and utilize many logical memory blocks, the system needs a manner in which the data can be made coherent or otherwise consistent across the various frames of reference in the processing system.
One way in which the data can be made coherent is to allow each individual process to independently flush all memory locations. During a flush operation, all processes can be made to stall while the flush completes. Additionally, the processing system may limit the ability to initiate flush operations by locking access to the flush mechanism once one process takes control of it.
Interlocking of the flush mechanism is an inefficient manner of ensuring data coherency, multiple processes can be stalled unnecessarily while waiting for their turn to access the flush mechanism. Serially initiating an independent flush mechanism for each independent process can also produce a large latency for each flush.
As data processing systems become more complex, the need to maintain data coherency across multiple independent processes will become an increasingly common situation. Each of the multiple independent processes appears as an independent launcher of a data coherency mechanism.